import functools

# 绝对值
print(abs(-1))  # 1

# 四舍五入
print(round(1.2))  # 1
# 1~4舍去， 6~9进位，当5时，如果5后面还有数字则进位，如果5后面没有数字的情况下，5前面的数字奇数则进位，5前面的数字是偶数则舍去。
print(round(1.5))  # 2
print(round(2.5))  # 2
print(round(1.51))  # 2

# 自定义高阶函数
def sum_num(a, b, f):
    return f(a) + f(b)


print(sum_num(-1, -2, abs))  # 3
print(sum_num(1.1, 2.5, round))  # 3


# 内置高阶函数

# map map(func, Ist)，将传入的函数变量func作用到lst变量的每个元素中，并将结果组成新的列表(Python2)/迭代器(Python3)返回。
list1 = [1, 2, 3, 4, 5]

def function(x):
    return x ** 2

result1 = map(function, list1)

print(result1)
print(list(result1))  # [1, 4, 9, 16, 25]

# reduce(func，Ist)，其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。
def function2(a, b):
    return a+b
result2 = functools.reduce(function2,list1)
print(result2)  # 15

# filter(func, lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换为列表,可以使用list()来转换。
def function3(x):
    return x % 2 == 0
result3 = filter(function3, list1)
print(result3)
print(list(result3))  # [2, 4]

